package de.fhffm.gaertnerei.tabellenModelle;
/**
 * @author Julian Schmücker
 */
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.swing.table.AbstractTableModel;

import de.fhffm.gaertnerei.tabellen.Aussaat;
import de.fhffm.gaertnerei.tabellen.Duenger;
import de.fhffm.gaertnerei.tabellen.PflanzOrt;
import de.fhffm.gaertnerei.tabellen.Pflanze;



@SuppressWarnings("serial")
public class AussaatTableModel extends AbstractTableModel {

	private EntityManager manager = Persistence.createEntityManagerFactory("chilidatenbank").createEntityManager(); 
	
	private int startPosition = 0;
	
	private List<Aussaat> aussaatListe;

	public AussaatTableModel() {
		
		this.startPosition = 0;
		this.aussaatListe = getItems(startPosition, startPosition+100);
		
	}

	@Override
	public int getRowCount() {
		 return ((Long) manager.createQuery("SELECT COUNT(c) FROM Aussaat c").getSingleResult()).intValue();
	}

	@Override
	public int getColumnCount() {
		return 6;
	}
	
	public String getColumnName(int spalte) {
	        
	    	switch(spalte) {
	            case 0:
	                return "ID";
	            case 1:
	                return "Datum";
	            case 2:
	            	return "PflanzOrt";
	            case 3:
	            	return "DuengerMenge";
	            case 4:
	            	return "Pflanze";
	            case 5:
	            	return "DuengerMarke";
	            default:
	                return "DEFAULT";
	        }
	    }

	@Override
	public Object getValueAt(int zeilenIndex, int spaltenIndex) {
	
		if((zeilenIndex >= startPosition) && (zeilenIndex < (startPosition+100))){
			/* Wenn die Zeile in dem vorher definierten Bereich liegt (standart ist 0-100)
			 * dann tuhe nix!
			 */
			
		}else {
			
			/*
			 * Falls die ausgewaehlte Zeile drueber liegt dan wird der Bereich neu gesetzt
			 * und die jeweiligen Items in diesem neuen bereich gehohlt
			 */
			this.aussaatListe = getItems(zeilenIndex,zeilenIndex+100);
			this.startPosition = zeilenIndex;
		}
		
		Aussaat aussaat = aussaatListe.get(zeilenIndex-startPosition);;

		Object toReturn = null;
		
		switch(spaltenIndex){
		case 0:
			toReturn = aussaat.getAussaatID();
			break;
		case 1:
			toReturn = aussaat.getAussaatDatum();
			break;
		case 2:
			PflanzOrt pflanzort = aussaat.getPflanzOrt();
			toReturn = pflanzort.getOrt();
			break;
		case 3:
			toReturn = aussaat.getDuengerMenge();
			break;
		case 4:
			Pflanze pflanze = aussaat.getPflanze();
			toReturn = pflanze.getSorte();
			break;
		case 5:
			Duenger duenger = aussaat.getDuenger();
			toReturn = duenger.getDuengerMarke();
			break;
		default:
			toReturn = aussaat.getAussaatID();
	}
		return toReturn;

	}
	
	/**
	 * Hohlt alle Aussaaten in dem Angegebenen bereich aus der Tabelle
	 * und gibt diese in einer Liste zurück
	 * @param von
	 * @param bis
	 * @return Aussaat Liste
	 */
	
	private List<Aussaat> getItems(int von, int bis) {
		
		System.out.println("Zugriff auf Aussaat Tabelle");
		Query query = manager.createQuery("SELECT a FROM Aussaat a").setMaxResults(bis-von).setFirstResult(von);
		
		List<Aussaat> resultList = query.getResultList();
		System.out.println("Größe der Liste:"+resultList.size());
		return resultList;
	}
}
